home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / ultqsrc.zip / OGRE.QC < prev    next >
Text File  |  1996-10-04  |  15KB  |  448 lines

  1. /*
  2. ==============================================================================
  3.  
  4. OGRE
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd /raid/quake/id1/models/ogre_c
  10. $origin 0 0 24
  11. $base base        
  12. $skin base
  13.  
  14. $frame    stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  15.  
  16. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7
  17. $frame walk8 walk9 walk10 walk11 walk12 walk13 walk14 walk15 walk16
  18.  
  19. $frame run1 run2 run3 run4 run5 run6 run7 run8
  20.  
  21. $frame swing1 swing2 swing3 swing4 swing5 swing6 swing7
  22. $frame swing8 swing9 swing10 swing11 swing12 swing13 swing14
  23.  
  24. $frame smash1 smash2 smash3 smash4 smash5 smash6 smash7
  25. $frame smash8 smash9 smash10 smash11 smash12 smash13 smash14
  26.  
  27. $frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6
  28.  
  29. $frame pain1 pain2 pain3 pain4 pain5
  30.  
  31. $frame painb1 painb2 painb3
  32.  
  33. $frame painc1 painc2 painc3 painc4 painc5 painc6
  34.  
  35. $frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
  36. $frame paind11 paind12 paind13 paind14 paind15 paind16
  37.  
  38. $frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
  39. $frame paine11 paine12 paine13 paine14 paine15
  40.  
  41. $frame death1 death2 death3 death4 death5 death6
  42. $frame death7 death8 death9 death10 death11 death12
  43. $frame death13 death14
  44.  
  45. $frame bdeath1 bdeath2 bdeath3 bdeath4 bdeath5 bdeath6
  46. $frame bdeath7 bdeath8 bdeath9 bdeath10
  47.  
  48. $frame pull1 pull2 pull3 pull4 pull5 pull6 pull7 pull8 pull9 pull10 pull11
  49.  
  50. //=============================================================================
  51. /*
  52. ================
  53. OgreFireGrenade
  54. ================
  55. */
  56. void(float side) chainsaw;
  57.  
  58. void() OgreFireGrenade =
  59. {
  60.     local    entity missile, mpuff;
  61.         local float zchange,dist;
  62.     local string str;
  63.  
  64.        if(self.ammo_rockets <= 0)
  65.        {
  66.         ai_run_melee();        // switch to the chainsaw
  67.         return;
  68.        }
  69.  
  70.         if (self.ammo_rockets > 0)
  71.                 self.ammo_rockets = self.ammo_rockets - 1;
  72.     
  73.     self.effects = self.effects | EF_MUZZLEFLASH;
  74.  
  75.     sound (self, CHAN_WEAPON, "weapons/grenade.wav", 1, ATTN_NORM);
  76.  
  77.     missile = spawn ();
  78.     missile.owner = self;
  79.     missile.movetype = MOVETYPE_BOUNCE;
  80.     missile.solid = SOLID_BBOX;
  81.         missile.classname = "grenade";         
  82. // set missile speed    
  83.         missile.takedamage = DAMAGE_AIM;
  84.         missile.health = 10;
  85.         missile.th_die = GrenadeExplode;
  86.  
  87.     makevectors (self.angles);
  88.         missile.speed = 600;
  89.     missile.velocity = normalize(self.enemy.origin - self.origin);
  90.     missile.velocity = missile.velocity * 600;
  91.         missile.velocity_z = 150;
  92.  
  93.         dist = vlen(self.enemy.origin - self.origin)/3;
  94.         zchange = self.enemy.origin_z - self.origin_z;
  95.         if (self.enemy.origin_z<self.origin_z - 24)
  96.                 missile.velocity_z = missile.velocity_z + zchange + dist; // same
  97.         else if (self.enemy.origin_z >= self.origin_z && (dist>21||zchange>36))
  98.                 missile.velocity_z = missile.velocity_z + zchange + dist; // same
  99.  
  100.     missile.avelocity = '300 300 300';
  101.  
  102.     missile.angles = vectoangles(missile.velocity);
  103.     
  104.         missile.touch = GrenadeTouch;
  105.     
  106. // set missile duration
  107.     missile.nextthink = time + 2.5;
  108.         missile.think = GrenadeExplode;
  109.  
  110.     setmodel (missile, "progs/grenade.mdl");
  111.     setsize (missile, '0 0 0', '0 0 0');        
  112.     setorigin (missile, self.origin);
  113. };
  114.  
  115.  
  116. //=============================================================================
  117.  
  118. /*
  119. ================
  120. chainsaw
  121.  
  122. FIXME
  123. ================
  124. */
  125. void(float side) chainsaw =
  126. {
  127. local vector    delta;
  128. local float     ldmg;
  129.  
  130.     if (!self.enemy)
  131.         return;
  132.         if (!CanDamage (self.enemy, self)&&self.enemy.classname!="corpse")
  133.         return;
  134.  
  135.     ai_charge(10);
  136.  
  137.     delta = self.enemy.origin - self.origin;
  138.  
  139.     if (vlen(delta) > 100)
  140.         return;
  141.         
  142.     ldmg = (random() + random() + random()) * 4;
  143.     T_Damage (self.enemy, self, self, ldmg);
  144.     
  145.     if (side)
  146.     {
  147.         makevectors (self.angles);
  148.         if (side == 1)
  149.             SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  150.         else
  151.             SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  152.     }
  153. };
  154.  
  155.  
  156. void() ogre_stand1    =[    $stand1,    ogre_stand2    ] {ai_stand();};
  157. void() ogre_stand2    =[    $stand2,    ogre_stand3    ] {ai_stand();};
  158. void() ogre_stand3    =[    $stand3,    ogre_stand4    ] {ai_stand();};
  159. void() ogre_stand4    =[    $stand4,    ogre_stand5    ] {ai_stand();};
  160. void() ogre_stand5    =[    $stand5,    ogre_stand6    ] {
  161. if (random() < 0.2)
  162.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  163. ai_stand();
  164. };
  165. void() ogre_stand6    =[    $stand6,    ogre_stand7    ] {ai_stand();};
  166. void() ogre_stand7    =[    $stand7,    ogre_stand8    ] {ai_stand();};
  167. void() ogre_stand8    =[    $stand8,    ogre_stand9    ] {ai_stand();};
  168. void() ogre_stand9    =[    $stand9,    ogre_stand1    ] {ai_stand();};
  169.  
  170. void() ogre_walk1    =[    $walk1,        ogre_walk2    ] {ai_walk(3);};
  171. void() ogre_walk2    =[    $walk2,        ogre_walk3    ] {ai_walk(2);};
  172. void() ogre_walk3    =[    $walk3,        ogre_walk4    ] {
  173. ai_walk(2);
  174. if (random() < 0.2)
  175.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  176. };
  177. void() ogre_walk4    =[    $walk4,        ogre_walk5    ] {ai_walk(2);};
  178. void() ogre_walk5    =[    $walk5,        ogre_walk6    ] {ai_walk(2);};
  179. void() ogre_walk6    =[    $walk6,        ogre_walk7    ] {
  180. ai_walk(5);
  181. if (random() < 0.1)
  182.     sound (self, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);
  183. };
  184. void() ogre_walk7    =[    $walk7,        ogre_walk8    ] {ai_walk(3);};
  185. void() ogre_walk8    =[    $walk8,        ogre_walk9    ] {ai_walk(2);};
  186. void() ogre_walk9    =[    $walk9,        ogre_walk10    ] {ai_walk(3);};
  187. void() ogre_walk10    =[    $walk10,    ogre_walk11    ] {ai_walk(1);};
  188. void() ogre_walk11    =[    $walk11,    ogre_walk12    ] {ai_walk(2);};
  189. void() ogre_walk12    =[    $walk12,    ogre_walk13    ] {ai_walk(3);};
  190. void() ogre_walk13    =[    $walk13,    ogre_walk14    ] {ai_walk(3);};
  191. void() ogre_walk14    =[    $walk14,    ogre_walk15    ] {ai_walk(3);};
  192. void() ogre_walk15    =[    $walk15,    ogre_walk16    ] {ai_walk(3);};
  193. void() ogre_walk16    =[    $walk16,    ogre_walk1    ] {ai_walk(4);};
  194.  
  195. void() ogre_run1    =[    $run1,        ogre_run2    ] {ai_run(9);
  196. if (random() < 0.2)
  197.     sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  198. };
  199. void() ogre_run2    =[    $run2,        ogre_run3    ] {ai_run(12);};
  200. void() ogre_run3    =[    $run3,        ogre_run4    ] {ai_run(8);};
  201. void() ogre_run4    =[    $run4,        ogre_run5    ] {ai_run(22);};
  202. void() ogre_run5    =[    $run5,        ogre_run6    ] {ai_run(16);};
  203. void() ogre_run6    =[    $run6,        ogre_run7    ] {ai_run(4);};
  204. void() ogre_run7    =[    $run7,        ogre_run8    ] {ai_run(13);};
  205. void() ogre_run8    =[    $run8,        ogre_run1    ] {ai_run(24);};
  206.  
  207. void() ogre_swing1    =[    $swing1,        ogre_swing2    ] {ai_charge(11);
  208. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  209. };
  210. void() ogre_swing2    =[    $swing2,        ogre_swing3    ] {ai_charge(1);};
  211. void() ogre_swing3    =[    $swing3,        ogre_swing4    ] {ai_charge(4);};
  212. void() ogre_swing4    =[    $swing4,        ogre_swing5    ] {ai_charge(13);};
  213. void() ogre_swing5    =[    $swing5,        ogre_swing6    ] {ai_charge(9); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  214. void() ogre_swing6    =[    $swing6,        ogre_swing7    ] {chainsaw(200);self.angles_y = self.angles_y + random()* 25;};
  215. void() ogre_swing7    =[    $swing7,        ogre_swing8    ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  216. void() ogre_swing8    =[    $swing8,        ogre_swing9    ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  217. void() ogre_swing9    =[    $swing9,        ogre_swing10 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  218. void() ogre_swing10    =[    $swing10,        ogre_swing11 ] {chainsaw(-200);self.angles_y = self.angles_y + random()* 25;};
  219. void() ogre_swing11    =[    $swing11,        ogre_swing12 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  220. void() ogre_swing12    =[    $swing12,        ogre_swing13 ] {ai_charge(3);};
  221. void() ogre_swing13    =[    $swing13,        ogre_swing14 ] {ai_charge(8);};
  222. void() ogre_swing14    =[    $swing14,        ogre_run1    ] {ai_charge(9);};
  223.  
  224. void() ogre_smash1    =[    $smash1,        ogre_smash2    ] {ai_charge(6);
  225. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  226. };
  227. void() ogre_smash2    =[    $smash2,        ogre_smash3    ] {ai_charge(0);};
  228. void() ogre_smash3    =[    $smash3,        ogre_smash4    ] {ai_charge(0);};
  229. void() ogre_smash4    =[    $smash4,        ogre_smash5    ] {ai_charge(1);};
  230. void() ogre_smash5    =[    $smash5,        ogre_smash6    ] {ai_charge(4);};
  231. void() ogre_smash6    =[    $smash6,        ogre_smash7    ] {ai_charge(4); chainsaw(0);};
  232. void() ogre_smash7    =[    $smash7,        ogre_smash8    ] {ai_charge(4); chainsaw(0);};
  233. void() ogre_smash8    =[    $smash8,        ogre_smash9    ] {ai_charge(10); chainsaw(0);};
  234. void() ogre_smash9    =[    $smash9,        ogre_smash10 ] {ai_charge(13); chainsaw(0);};
  235. void() ogre_smash10    =[    $smash10,        ogre_smash11 ] {chainsaw(1);};
  236. void() ogre_smash11    =[    $smash11,        ogre_smash12 ] {ai_charge(2); chainsaw(0);
  237. self.nextthink = self.nextthink + random()*0.2;};    // slight variation
  238. void() ogre_smash12    =[    $smash12,        ogre_smash13 ] {ai_charge();};
  239. void() ogre_smash13    =[    $smash13,        ogre_smash14 ] {ai_charge(4);};
  240. void() ogre_smash14    =[    $smash14,        ogre_run1    ] {ai_charge(12);};
  241.  
  242. void() ogre_nail1    =[    $shoot1,        ogre_nail2    ] {ai_face();};
  243. void() ogre_nail2    =[    $shoot2,        ogre_nail3    ] {ai_face();};
  244. void() ogre_nail3    =[    $shoot2,        ogre_nail4    ] {ai_face();};
  245. void() ogre_nail4    =[    $shoot3,        ogre_nail5    ] {ai_face();OgreFireGrenade();};
  246. void() ogre_nail5    =[    $shoot4,        ogre_nail6    ] {ai_face();};
  247. void() ogre_nail6    =[    $shoot5,        ogre_nail7    ] {ai_face();};
  248. void() ogre_nail7    =[    $shoot6,        ogre_run1    ] {ai_face();};
  249.  
  250. void()    ogre_pain1    =[    $pain1,        ogre_pain2    ] {};
  251. void()    ogre_pain2    =[    $pain2,        ogre_pain3    ] {};
  252. void()    ogre_pain3    =[    $pain3,        ogre_pain4    ] {};
  253. void()    ogre_pain4    =[    $pain4,        ogre_pain5    ] {};
  254. void()    ogre_pain5    =[    $pain5,        ogre_run1    ] {};
  255.  
  256.  
  257. void()    ogre_painb1    =[    $painb1,    ogre_painb2    ] {};
  258. void()    ogre_painb2    =[    $painb2,    ogre_painb3    ] {};
  259. void()    ogre_painb3    =[    $painb3,    ogre_run1    ] {};
  260.  
  261.  
  262. void()    ogre_painc1    =[    $painc1,    ogre_painc2    ] {};
  263. void()    ogre_painc2    =[    $painc2,    ogre_painc3    ] {};
  264. void()    ogre_painc3    =[    $painc3,    ogre_painc4    ] {};
  265. void()    ogre_painc4    =[    $painc4,    ogre_painc5    ] {};
  266. void()    ogre_painc5    =[    $painc5,    ogre_painc6    ] {};
  267. void()    ogre_painc6    =[    $painc6,    ogre_run1    ] {};
  268.  
  269.  
  270. void()    ogre_paind1    =[    $paind1,    ogre_paind2    ] {};
  271. void()    ogre_paind2    =[    $paind2,    ogre_paind3    ] {ai_pain(10);};
  272. void()    ogre_paind3    =[    $paind3,    ogre_paind4    ] {ai_pain(9);};
  273. void()    ogre_paind4    =[    $paind4,    ogre_paind5    ] {ai_pain(4);};
  274. void()    ogre_paind5    =[    $paind5,    ogre_paind6    ] {};
  275. void()    ogre_paind6    =[    $paind6,    ogre_paind7    ] {};
  276. void()    ogre_paind7    =[    $paind7,    ogre_paind8    ] {};
  277. void()    ogre_paind8    =[    $paind8,    ogre_paind9    ] {};
  278. void()    ogre_paind9    =[    $paind9,    ogre_paind10    ] {};
  279. void()    ogre_paind10=[    $paind10,    ogre_paind11    ] {};
  280. void()    ogre_paind11=[    $paind11,    ogre_paind12    ] {};
  281. void()    ogre_paind12=[    $paind12,    ogre_paind13    ] {};
  282. void()    ogre_paind13=[    $paind13,    ogre_paind14    ] {};
  283. void()    ogre_paind14=[    $paind14,    ogre_paind15    ] {};
  284. void()    ogre_paind15=[    $paind15,    ogre_paind16    ] {};
  285. void()    ogre_paind16=[    $paind16,    ogre_run1    ] {};
  286.  
  287. void()    ogre_paine1    =[    $paine1,    ogre_paine2    ] {};
  288. void()    ogre_paine2    =[    $paine2,    ogre_paine3    ] {ai_pain(10);};
  289. void()    ogre_paine3    =[    $paine3,    ogre_paine4    ] {ai_pain(9);};
  290. void()    ogre_paine4    =[    $paine4,    ogre_paine5    ] {ai_pain(4);};
  291. void()    ogre_paine5    =[    $paine5,    ogre_paine6    ] {};
  292. void()    ogre_paine6    =[    $paine6,    ogre_paine7    ] {};
  293. void()    ogre_paine7    =[    $paine7,    ogre_paine8    ] {};
  294. void()    ogre_paine8    =[    $paine8,    ogre_paine9    ] {};
  295. void()    ogre_paine9    =[    $paine9,    ogre_paine10    ] {};
  296. void()    ogre_paine10=[    $paine10,    ogre_paine11    ] {};
  297. void()    ogre_paine11=[    $paine11,    ogre_paine12    ] {};
  298. void()    ogre_paine12=[    $paine12,    ogre_paine13    ] {};
  299. void()    ogre_paine13=[    $paine13,    ogre_paine14    ] {};
  300. void()    ogre_paine14=[    $paine14,    ogre_paine15    ] {};
  301. void()    ogre_paine15=[    $paine15,    ogre_run1    ] {};
  302.  
  303.  
  304. void(entity attacker, float damage)    ogre_pain =
  305. {
  306.     local float    r;
  307.  
  308. // don't make multiple pain sounds right after each other
  309.     if (self.pain_finished > time)
  310.         return;
  311.  
  312.     sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);        
  313.  
  314.     r = random();
  315.     
  316.     if (r < 0.25)
  317.     {
  318.         ogre_pain1 ();
  319.         self.pain_finished = time + 1;
  320.     }
  321.     else if (r < 0.5)
  322.     {
  323.         ogre_painb1 ();
  324.         self.pain_finished = time + 1;
  325.     }
  326.     else if (r < 0.75)
  327.     {
  328.         ogre_painc1 ();
  329.         self.pain_finished = time + 1;
  330.     }
  331.     else if (r < 0.88)
  332.     {
  333.         ogre_paind1 ();
  334.         self.pain_finished = time + 2;
  335.     }
  336.     else
  337.     {
  338.         ogre_paine1 ();
  339.         self.pain_finished = time + 2;
  340.     }
  341. };
  342. void()  ogre_die1       =[      $death1,        ogre_die2       ] {};
  343. void()    ogre_die2    =[    $death2,    ogre_die3    ] {};
  344. void()    ogre_die3    =[    $death3,    ogre_die4    ]
  345. {DropBackpack();};
  346. void()    ogre_die4    =[    $death4,    ogre_die5    ] {};
  347. void()    ogre_die5    =[    $death5,    ogre_die6    ] {};
  348. void()    ogre_die6    =[    $death6,    ogre_die7    ] {};
  349. void()    ogre_die7    =[    $death7,    ogre_die8    ] {};
  350. void()    ogre_die8    =[    $death8,    ogre_die9    ] {};
  351. void()    ogre_die9    =[    $death9,    ogre_die10    ] {};
  352. void()    ogre_die10    =[    $death10,    ogre_die11    ] {};
  353. void()    ogre_die11    =[    $death11,    ogre_die12    ] {};
  354. void()    ogre_die12    =[    $death12,    ogre_die13    ] {};
  355. void()    ogre_die13    =[    $death13,    ogre_die14    ] {};
  356. void()  ogre_die14      =[      $death14,       ogre_die14      ] {MakeSolidCorpse ("progs/h_ogre.mdl",self.classname);};
  357.  
  358. void()    ogre_bdie1    =[    $bdeath1,    ogre_bdie2    ] {};
  359. void()    ogre_bdie2    =[    $bdeath2,    ogre_bdie3    ] {ai_forward(5);};
  360. void()    ogre_bdie3    =[    $bdeath3,    ogre_bdie4    ]
  361. {DropBackpack();};
  362. void()    ogre_bdie4    =[    $bdeath4,    ogre_bdie5    ] {ai_forward(1);};
  363. void()    ogre_bdie5    =[    $bdeath5,    ogre_bdie6    ] {ai_forward(3);};
  364. void()    ogre_bdie6    =[    $bdeath6,    ogre_bdie7    ] {ai_forward(7);};
  365. void()    ogre_bdie7    =[    $bdeath7,    ogre_bdie8    ] {ai_forward(25);};
  366. void()    ogre_bdie8    =[    $bdeath8,    ogre_bdie9    ] {};
  367. void()    ogre_bdie9    =[    $bdeath9,    ogre_bdie10    ] {};
  368. void()  ogre_bdie10     =[      $bdeath10,      ogre_bdie10     ] {MakeSolidCorpse ("progs/h_ogre.mdl",self.classname);};
  369.  
  370. void() ogre_die =
  371. {
  372. // check for gib
  373.         if (self.health < -50)
  374.     {
  375.         self.enemy.exp = self.enemy.exp + (70 - self.health)*skill;
  376.         self.netname = "progs/h_ogre.mdl";
  377.         CorpseDie();
  378.         return;
  379.     }
  380.  
  381.     sound (self, CHAN_VOICE, "ogre/ogdth.wav", 1, ATTN_NORM);
  382.     
  383.     if (random() < 0.5)
  384.         ogre_die1 ();
  385.     else
  386.         ogre_bdie1 ();
  387. };
  388.  
  389. void() ogre_melee =
  390. {
  391.     if (random() > 0.5)
  392.         ogre_smash1 ();
  393.     else
  394.         ogre_swing1 ();
  395. };
  396.  
  397. void () ogre_killcorpse =
  398. {
  399.         if(other==self.enemy)
  400.                 return;
  401.         if (other.classname == "corpse")
  402.                 {
  403.                 self.enemy = other;
  404.                 ogre_melee();
  405.                 }
  406. };
  407. /*QUAKED monster_ogre (1 0 0) (-32 -32 -24) (32 32 64) Ambush
  408.  
  409. */
  410. void() monster_ogre =
  411. {
  412.         if ((!self.charmed)&&(deathmatch))
  413.     {
  414.         remove(self);
  415.         return;
  416.     }
  417.     self.solid = SOLID_SLIDEBOX;
  418.     self.movetype = MOVETYPE_STEP;
  419.  
  420.     setmodel (self, "progs/ogre.mdl");
  421.  
  422.     setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  423.     self.health = 200;
  424.         self.alive = TRUE;
  425.         self.classname ="ogre";
  426.         // 15-23 grenades
  427.         self.ammo_rockets = random() * 10;
  428.         self.ammo_rockets = rint(self.ammo_cells) + 14;
  429.  
  430.     self.th_stand = ogre_stand1;
  431.     self.th_walk = ogre_walk1;
  432.     self.th_run = ogre_run1;
  433.     self.th_die = ogre_die;
  434.     self.th_melee = ogre_melee;
  435.     self.th_missile = ogre_nail1;
  436.     self.th_pain = ogre_pain;
  437.         self.touch = ogre_killcorpse;
  438.         self.initthink = monster_ogre;
  439.         self.active = 3;
  440.  
  441.     walkmonster_start();
  442. };
  443.  
  444. void() monster_ogre_marksman =
  445. {
  446.     monster_ogre ();
  447. };
  448.